// permission.js文件其实就是路由导航守卫的抽离的单独的模块, 后期自己写
// 路由导航守卫(路由钩子)
import router from '@/router'
import store from '@/store'
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'
import { getToken } from './utils/auth'
import { asyncRoutes } from '@/router/index' // 引入动态路由

const whiteList = ['/login', '/404']
// 前置导航守卫
router.beforeEach(async(to, from, next) => {
  // console.log(to)
  nprogress.start() // 开启进度条
  const hasToken = getToken() // 一定放在导航守卫内获取
  // 1. 先判断是否有token, 如果有token,还要去登录页面, 强制去首页
  if (hasToken) {
    if (to.path === '/login') {
      next('/')
      nprogress.done() // 这里需要手动关闭进度条,没有放行,到不了后置守卫
    } else {
      if (!store.getters.userId) {
        const res = await store.dispatch('user/getUserInfo')
        console.log(res.roles.menus, '用户权限')
        const userRoutes = asyncRoutes.filter(item => {
          if (res.roles.menus.includes(item.name)) {
            return true
          } else {
            return false
          }
        })
        console.log(userRoutes, '动态路由')
        // 动态添加路由
        store.commit('user/setRoutes', userRoutes)
        // router.addRoutes(userRoutes)
        router.addRoutes([
          ...userRoutes,
          { path: '*', redirect: '/404', hidden: true } // 404页面必须在路由规则的最后面
        ])
        // next(to.path)
        // return
      }

      next()
    }
  } else {
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
      nprogress.done() // 这里需要手动关闭进度条,没有放行,到不了后置守卫
    }
  }
})
// 后置导航守卫
router.afterEach((to, from) => {
  // 关闭进度条
  nprogress.done()
})
// 路由守卫=>重写一下(锻炼)
// 有token=>放行（非要去登录引导到首页）
// 没有token=>拦截到登录（可以去白名单页面）
// 守卫
// 前置守卫页面被匹配显示之前
// 前置守卫的语法=>router.beforeEach(（to，from，next）=>）
// 后置守卫页面被匹配显示之后
// 后置守卫的语法=>router.afterEach（（to，from）=>{）
// 坑：前置守卫一定会触发后置守卫不一定会触发（前置守卫中没放行)
// 场景：页面访问进度条=>前置守卫中开启进度条=>后置守卫中关闭进度条
